package com.auth.controller;

import com.auth.pojo.User;
import com.auth.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2017/7/21 0021.
 *
 * 在 @PreAuthorize 中我们可以利用内建的 SPEL 表达式：比如 'hasRole()' 来决定哪些用户有权访问。
 * 需注意的一点是 hasRole 表达式认为每个角色名字前都有一个前缀 'ROLE_'。所以这里的 'ADMIN' 其实在
 * 数据库中存储的是 'ROLE_ADMIN' 。这个 @PreAuthorize 可以修饰Controller也可修饰Controller中的方法。
 *
 */
@RestController
@RequestMapping("/user")
public class AuthTestController {
    @Autowired
    private UserRepository userRepository;

    /**
     * 只允许登录账户和admin权限
     * @param id
     * @return
     */
    @PostAuthorize("returnObject.username == principal.username or hasRole('ROLE_ADMIN')")
    @GetMapping("/findById")
    public User getUser( String id) {
        return userRepository.findOne(id);
    }

    @PreAuthorize("hasRole('ADMIN')")
    @PostMapping("/admin")
   public String  admin() throws Exception{
        return "this is admin";
    }

    @PreAuthorize("hasRole('USER')")
    @PostMapping("/user")
    public String  user(){
        return "this is user";
    }



}
